home *** CD-ROM | disk | FTP | other *** search
- /* ==========================================================================
- **
- ** VScroller.c
- **
- ** ©1991 WILLISoft
- **
- ** ==========================================================================
- */
-
- #include "parms.h" /* added for proper prototyping -- EDB */
- #include "Positioner.h"
- #include "PositionerClass.h"
-
- #include <stdio.h>
- #include "minmax.h"
- #include "VScroller.h"
- #include "VScrollerClass.h"
- #include "EmbossedGadgetClass.h"
- #ifndef __GNUC__
- #include <clib/exec_protos.h>
- #include <clib/intuition_protos.h>
- #include <clib/graphics_protos.h>
- #include <clib/diskfont_protos.h>
- #endif
- #ifdef __GNUC__
- #include <proto/exec.h>
- #include <proto/intuition.h>
- #include <proto/graphics.h>
- #include <proto/diskfont.h>
- #endif
- #ifdef __SASC
- #include <proto/exec.h>
- #include <proto/intuition.h>
- #include <proto/graphics.h>
- #include <proto/diskfont.h>
- #endif
- #include "amigamem.h"
-
- void VScroller_SetInteractorWindow( VScroller *self, pcgWindow *window )
- {
- self->posr.IaWindow = window;
- SetInteractorWindow( (Interactor *)&self->vslider, window );
- SetInteractorWindow( (Interactor *)&self->uparrow, window );
- SetInteractorWindow( (Interactor *)&self->downarrow, window );
- }
-
-
-
- void VScroller_CleanUp( VScroller *self )
- {
- CleanUp( (PObject *)&self->vslider );
- CleanUp( (PObject *)&self->uparrow );
- CleanUp( (PObject *)&self->downarrow );
- }
-
-
- tPoint VScroller_SetLocation( VScroller *self,
- PIXELS LeftEdge,
- PIXELS TopEdge )
- {
-
- Point Up_size, Slider_size;
- Point Up_pos, Down_pos;
-
-
- Up_size = Size( (GraphicObject *)&self->uparrow );
- Slider_size = Size( (GraphicObject *)&self->vslider );
-
- SetLocation( (GraphicObject *)&self->vslider, LeftEdge, TopEdge );
-
- Up_pos.x = LeftEdge;
- Up_pos.y = TopEdge + Slider_size.y;
- SetLocation( (GraphicObject *)&self->uparrow, Up_pos.x, Up_pos.y );
-
- Down_pos.x = LeftEdge;
- Down_pos.y = Up_pos.y + Up_size.y;
- SetLocation( (GraphicObject *)&self->downarrow, Down_pos.x, Down_pos.y );
-
- self->posr.Location.x = LeftEdge;
- self->posr.Location.y = TopEdge;
-
- return Location( (GraphicObject *)self );
- }
-
-
- tPoint VScroller_private_AskSize( VScroller *self,
- PIXELS Width,
- PIXELS Height,
- Point *Up_size,
- Point *Down_size,
- Point *Slider_size )
- {
- Point size;
-
- *Up_size = AskSize( (GraphicObject *)&self->uparrow, 0, 0 );
- *Down_size = AskSize( (GraphicObject *)&self->downarrow, 0, 0 );
-
- Slider_size->y = Height - (Up_size->y + Down_size->y);
- Slider_size->x = MAX( Up_size->x, Down_size->x );
-
- *Slider_size = AskSize( (GraphicObject *)&self->vslider, Slider_size->x, Slider_size->y );
-
- size.x = Slider_size->x;
- size.y = Slider_size->y + Up_size->y + Down_size->y;
-
- return size;
- }
-
-
- tPoint VScroller_AskSize( VScroller *self,
- PIXELS Width,
- PIXELS Height )
- {
- Point Up_size, Down_size, Slider_size, size;
-
- size = VScroller_private_AskSize( self, Width, Height,
- &Up_size, &Down_size, &Slider_size );
-
- return size;
- }
-
-
- tPoint VScroller_SetSize( VScroller *self,
- PIXELS Width,
- PIXELS Height )
- {
-
- tPoint Up_size, Down_size, Slider_size, size;
- tPoint pos;
-
- size = VScroller_private_AskSize( self, Width, Height,
- &Up_size, &Down_size, &Slider_size );
-
- SetSize( (GraphicObject *)&self->uparrow, Up_size.x, Up_size.y );
- SetSize( (GraphicObject *)&self->downarrow, Down_size.x, Down_size.y );
- SetSize( (GraphicObject *)&self->vslider, Slider_size.x, Slider_size.y );
-
- /* Now must fix the positions of uparrow, down arrow. */
-
- pos = Location( (GraphicObject *)self );
- SetLocation( (GraphicObject *)self, pos.x, pos.y );
- self->posr.Size = size;
-
- AlignText( &self->vslider.eg.LabelText, Size( (GraphicObject *)self ) );
-
- return size;
- }
-
-
- void VScroller_Render( VScroller *self, RastPort *RPort )
- {
- Render( (GraphicObject *)&self->vslider, RPort );
- Render( (GraphicObject *)&self->uparrow, RPort );
- Render( (GraphicObject *)&self->downarrow, RPort );
- }
-
-
- Gadget *VScroller_FirstGadget( VScroller *self )
- {
- return FirstGadget( (Interactor *)&self->vslider );
- }
-
-
- USHORT VScroller_nGadgets( VScroller *self )
- {
- return( (USHORT) ( nGadgets( (Interactor *)&self->vslider )
- + nGadgets( (Interactor *)&self->uparrow )
- + nGadgets( (Interactor *)&self->downarrow ) )
- );
- }
-
-
- ULONG VScroller_IDCMPFlags( VScroller *self )
- {
- return IDCMPFlags( (Interactor *)&self->vslider )
- | IDCMPFlags( (Interactor *)&self->uparrow )
- | IDCMPFlags( (Interactor *)&self->downarrow );
- }
-
- USHORT VScroller_ClaimEvent( VScroller *self, IntuiMessage *event )
- {
- return( (USHORT)( ClaimEvent( (Interactor *)&self->vslider, event )
- | ClaimEvent( (Interactor *)&self->uparrow, event )
- | ClaimEvent( (Interactor *)&self->downarrow, event ) ) );
-
- }
-
- BOOL VScroller_EnableIactor( VScroller *self, BOOL enable )
- {
- EnableIactor( (Interactor *)&self->vslider, enable );
- EnableIactor( (Interactor *)&self->uparrow, enable );
- EnableIactor( (Interactor *)&self->downarrow, enable );
- return enable;
- }
-
- USHORT VScroller_Respond( VScroller *self, IntuiMessage *event )
- {
- USHORT vsr = 0; /* Vertical slider response */
- USHORT uar = 0; /* uparrow response */
- USHORT dar = 0; /* down arrow response */
-
- vsr = Respond( (Interactor *)&self->vslider, event );
-
- if( ! ( vsr & CONSUMED_EVENT ) )
- {
- /* Up Arrow */
- uar = Respond( (Interactor *)&self->uparrow, event );
-
- if( ( uar & CHANGED_STATE ) && ( Value( (Valuator *)&self->uparrow ) ) )
- {
- SlideLower( &self->vslider );
- }
-
- if( !( uar & CONSUMED_EVENT ) )
- {
- /* Down Arrow */
- dar = Respond( (Interactor *)&self->downarrow, event );
- if( ( dar & CHANGED_STATE ) && ( Value( (Valuator *)&self->downarrow ) ) )
- {
- SlideHigher( &self->vslider );
- }
- }
- }
-
- return( (USHORT) ( vsr | uar | dar ) );
- }
-
-
- void VScroller_Refresh( VScroller *self )
- {
- pcgWindow *window;
-
- if( window = InteractorWindow( (Interactor *)self ) )
- {
- Refresh( (Interactor *)&self->vslider );
- Refresh( (Interactor *)&self->uparrow );
- Refresh( (Interactor *)&self->downarrow );
- }
- }
-
- /* Changed to long -- EDB */
- long VScroller_Value( VScroller *self )
- {
- return Value( (Valuator *)&self->vslider );
- }
-
- /* Changed to long and LONG -- EDB */
- long VScroller_SetValue( VScroller *self, LONG position )
- {
- return SetValue( (Valuator *)&self->vslider, position );
- }
-
- USHORT VScroller_KnobSize( VScroller *self )
- {
- return KnobSize( (Positioner *)&self->vslider );
- }
-
- USHORT VScroller_SetKnobSize( VScroller *self, USHORT knobsize )
- {
- return SetKnobSize( (Positioner *)&self->vslider, knobsize );
- }
-
- char *VScroller_Title( VScroller *self )
- {
- return Title( (GraphicObject *)&self->vslider );
- }
-
- BOOL VScroller_SetTitle( VScroller *self,
- char *title )
- {
- SetTitle( (GraphicObject *)&self->vslider, title );
- AlignText( &self->vslider.eg.LabelText, Size( (GraphicObject *)self ) );
-
- return TRUE;
- }
-
- /* EDB -- Added Default Font Support Methods */
- extern TextAttr go_DefaultFont;
-
- TextAttr *VScroller_DefaultFont( VScroller *self )
- {
- if( self->vslider.eg.LabelText.ITextFont != NULL )
- return( self->vslider.eg.LabelText.ITextFont );
- else return &go_DefaultFont; /* Topaz80 */
- }
-
- BOOL VScroller_SetDefaultFont( VScroller *self, TextAttr *default_font )
- {
- struct TextFont *myfont;
-
- if( default_font != NULL )
- { /* check to see if font is really available */
- if( myfont = OpenDiskFont( default_font ) )
- {
- self->vslider.eg.LabelText.ITextFont = default_font;
-
- CloseFont( myfont );
- /* Get ourselves back into alignment */
- AlignText( &self->vslider.eg.LabelText, Size( (GraphicObject *)self ) );
- return TRUE;
- }
- else return FALSE; /* font is not available */
- }
- else return FALSE; /* pointer was invalid */
- }
-
- AlignInfo *VScroller_TextAlignment( VScroller *self )
- {
- return( &(self->vslider.eg.LabelText.alignment) );
- }
-
- BOOL VScroller_SetTextAlignment( VScroller *self,
- UBYTE Flags,
- BYTE Xpad,
- BYTE Ypad )
- {
- self->vslider.eg.LabelText.alignment.Flags = Flags;
- self->vslider.eg.LabelText.alignment.Xpad = Xpad;
- self->vslider.eg.LabelText.alignment.Ypad = Ypad;
- AlignText( &self->vslider.eg.LabelText, Size( (GraphicObject *)self ) );
- return TRUE;
- }
-
-
-
-
- BOOL VScroller_elaborated = FALSE;
-
- struct PositionerClass VScroller_Class;
-
- void VScrollerClass_Init( struct PositionerClass *class )
- {
- PositionerClass_Init( class );
- class->isa = PositionerClass();
- class->ClassName = "VScroller";
- /* class->New = VScroller_New;*/
- class->CleanUp = (void(*)(PObject *))VScroller_CleanUp;
- class->SetLocation = (Point(*)(GraphicObject *, PIXELS, PIXELS))VScroller_SetLocation;
- class->AskSize = (Point(*)(GraphicObject *, PIXELS, PIXELS))VScroller_AskSize;
- class->SetSize = (Point(*)(GraphicObject *, PIXELS, PIXELS))VScroller_SetSize;
- class->SizeFlags = GraphicObject_SizeFlagsY;
- class->Render = (void(*)(GraphicObject *, RastPort *))VScroller_Render;
- class->SetInteractorWindow = (void(*)(Interactor *, struct pcgWindow *))VScroller_SetInteractorWindow;
- class->FirstGadget = (Gadget*(*)(Interactor *))VScroller_FirstGadget;
- class->nGadgets = (USHORT(*)(Interactor *))VScroller_nGadgets;
- class->IDCMPFlags = (ULONG(*)(Interactor *))VScroller_IDCMPFlags;
- class->ClaimEvent = (USHORT(*)(Interactor *, IntuiMessage *))VScroller_ClaimEvent;
- class->Respond = (USHORT(*)(Interactor *, IntuiMessage *))VScroller_Respond;
- class->Refresh = (void(*)(Interactor *))VScroller_Refresh;
- class->EnableIactor = (BOOL(*)(Interactor *, BOOL))VScroller_EnableIactor;
- class->isEnabled = (BOOL(*)(Interactor *))EmbossedGadget_isEnabled;
- class->Activate = NULL;
- class->isActive = NULL;
- class->SetKnobSize = (USHORT(*)(Positioner *, USHORT))VScroller_SetKnobSize;
- class->SetValue = (LONG(*)(Valuator *, LONG))VScroller_SetValue;
- class->KnobSize = (USHORT(*)(Positioner *))VScroller_KnobSize;
- class->Value = (LONG(*)(Valuator *))VScroller_Value;
- class->Title = (char*(*)(GraphicObject *))VScroller_Title;
- class->SetTitle = (BOOL(*)(GraphicObject *, char *))VScroller_SetTitle;
- class->DefaultFont = (TextAttr*(*)(GraphicObject *))VScroller_DefaultFont;
- class->SetDefaultFont = (BOOL(*)(GraphicObject *, TextAttr *))VScroller_SetDefaultFont;
- class->TextAlignment = (AlignInfo*(*)(GraphicObject *))VScroller_TextAlignment;
- class->SetTextAlignment = (BOOL(*)(GraphicObject *, UBYTE, BYTE, BYTE))VScroller_SetTextAlignment;
-
- }
-
-
- struct PositionerClass *VScrollerClass( void )
- {
- if( ! VScroller_elaborated )
- {
- VScrollerClass_Init( &VScroller_Class );
- VScroller_elaborated = TRUE;
- }
-
- return &VScroller_Class;
- }
-
-
-
-
- void VScroller_Init( VScroller *self,
- PIXELS LeftEdge,
- PIXELS TopEdge,
- PIXELS Height,
- pcg_3DPens Pens,
- char *label )
- {
- Gadget *g;
-
- Positioner_Init( (Positioner *)self );
-
- self->posr.isa = VScrollerClass();
- self->posr.Next = NULL;
- self->posr.PObjectName = NULL;
- self->posr.Location.x = LeftEdge;
- self->posr.Location.y = TopEdge;
- self->Pens = Pens;
-
- /*
- ** Initialize objects with dumb values, just so that they are now
- ** proper objects.
- */
-
- ArrowGadget_Init( &self->uparrow, LeftEdge, TopEdge,
- UpArrow, Pens );
- ArrowGadget_Init( &self->downarrow, LeftEdge, TopEdge,
- DownArrow, Pens );
-
- VSlider_Init( &self->vslider, LeftEdge, TopEdge, 0, 0, Pens, NULL );
-
- self->vslider.eg.Next = &self->uparrow;
- self->uparrow.Next = &self->downarrow;
-
- SetSize( (GraphicObject *)self, 0, Height );
- SetTitle( (GraphicObject *)self, label );
- SetTextAlignment( (GraphicObject *)self, tx_XCENTER | tx_BOTTOM | tx_OUTSIDE, STD_XPAD, STD_YPAD );
-
- /* Chain the gadgets together. */
- g = FirstGadget( (Interactor *)self );
- ChainGadgets( g, FirstGadget( (Interactor *)&self->uparrow ) );
- ChainGadgets( g, FirstGadget( (Interactor *)&self->downarrow ) );
- }
-